extends RefCounted
class_name Controller
#用Model处理业务逻辑.

var _model: Model

var _上一个数: float = 0 :
	get:
		return _model.上一个数
	set(value):
		_model.上一个数 = value
var _当前数字 : float = 0 :
	get:
		return _model.当前数字
	set(value):
		_model.当前数字 = value
var _当前运算:String = "" :
	get:
		return _model.当前运算
	set(value):
		_model.当前运算 = value
var _has_current_number : bool = false :
	get:
		return _model.has_current_number
	set(value):
		_model.has_current_number = value
# 添加此行以跟踪小数点后有多少数字
var _精度位数: int = 0 :
	get:
		return _model.精度位数
	set(value):
		_model.精度位数 = value

## 显示更新
signal 结果变化信号


## 构造函数，注入model.    model.new() 时,_init方法,就会被调用
func _init(model) -> void:
	_model = model

## 输入处理
func input_value(value: String) -> void:
	if value == "=":
		if _当前运算 != "":
			_model.evaluate_expression()
	elif value in ["+", "-", "*", "/"]:
		# 如果已有一个运算符和两个数字，先完成运算
		if _当前运算 != "":
			_model.evaluate_expression()
		_当前运算 = value
		_上一个数 = _当前数字
		_当前数字 = 0
		_has_current_number = false
		_精度位数 = 0
	elif value == "开始计算":
		_model.清零方法()
	elif value == ".":
		# 如果尚未输入小数点
		if _精度位数 == 0:
			_精度位数 = 1
			if not _has_current_number:
				_当前数字 = 0
				_has_current_number = true
	else:
		if _has_current_number:
			# 如果小数点被输入
			if _精度位数 > 0:
				_当前数字 += float(value) / pow(10, _精度位数)
				_精度位数 += 1
			else:
				_当前数字 = _当前数字 * 10 + float(value)
		else:
			_当前数字 = float(value)
			_has_current_number = true
	结果变化信号.emit(_get_display_value())

## 私有函数，获取显示数值
func _get_display_value() -> String:
	var str_current_number : String = str(_当前数字) if _精度位数 == 0 else "%.*f" % [_精度位数 - 1, _当前数字]
		
	if _has_current_number and _精度位数 == 1 and "." not in str_current_number:
		str_current_number += "."
	if not _has_current_number:
		return str(_上一个数) + " " + str(_当前运算)
	elif _当前运算 == "":
		return str_current_number
	else:
		return str(_上一个数) + " " + str(_当前运算) + " " + str_current_number
